Terraform Cloudの課金単位のResourceについて説明してみる
Terraform CloudはResourceの数に対して課金されます。
Standard $0.00014 per hour per resource
HashiCorp Terraform: Enterprise Pricing, Packages & Features
初見では、「Resourceの数って何?」と思う方も多いかもしれません。
この記事では、Terraform Cloudの課金単位であるResourceについて説明します。
結論
- 課金単位のResourceとは、Terraformで管理しているリソースを指す
- 例えばEC2インスタンス(aws_instance)やS3バケット(aws_s3_bucket)など
- null_resourceやdataは含まない
- Resource数の確認方法
terraform state list
で確認- Terraform Cloudのコンソールから確認
課金単位は、Terraformで管理しているリソースの数
以下のコードの場合、リソースの数は3になります。 (aws_subnet,aws_route_table,aws_route_table_association)
resource "aws_subnet" "main" { cidr_block = cidrsubnet(data.aws_vpc.target.cidr_block, 2, var.az_numbers[data.aws_availability_zone.target.name_suffix]) vpc_id = var.vpc_id availability_zone = var.availability_zone } resource "aws_route_table" "main" { vpc_id = var.vpc_id } resource "aws_route_table_association" "main" { subnet_id = aws_subnet.main.id route_table_id = aws_route_table.main.id }
null_resource
やdata
は含まれません。
複数のリソースを作る際に、for_eachなどを使うことがあると思います。(AZを配列にして、Subnetを作成等)
その場合は、コード上ではリソースブロックが1つなります。しかし、Terraformで実際に管理しているリソース に対して課金されるため、for_eachで書かなかった場合と同様にリソース数はカウントされます。
Resource数の確認方法
サンプルとして以下のコードを用意します。
課金対象としてカウントされませんが、null_resource
とdata
も用意しておきます。
resource "aws_vpc" "main" { cidr_block = "10.0.0.0/16" instance_tenancy = "default" tags = { Name = "main" } } data "aws_region" "current" {} resource "null_resource" "example" { triggers = { always_run = "${timestamp()}" } provisioner "local-exec" { command = "echo Hello, World!" } }
terraform state list
で確認
terraform state list
コマンドでTerraformで管理しているResourceを出力できます。
このコマンドの出力には、data
とnull_resource
も含まれます。除外した方がより正確です。
$ terraform state list | grep -v '^data\..*' | grep -v '^null_resource\..*' aws_vpc.main
1行につき1Resourceになるため、wc
で行をカウントしてあげれば、おおよその数を把握できます。
$ terraform state list | grep -v '^data\..*' | grep -v '^null_resource\..*' | wc -l 1
Terraform Cloudコンソール上から確認
OrganizationごとのResource数
Standard Editionの場合、Usageから確認可能です。
WorkspaceごとのResource数
WorkspaceのOverviewやStatesから確認できます。
ただ、課金対象ではないdata
とnull_resource
も含まれるため、注意が必要です。
おわりに
Terraform Cloudの課金単位である、Resourceについてでした。
利用規模によっては割引も受けれることがあります。コストにお悩みの場合は、Hashicorp社や製品を取り扱うパートナー(弊社でも取り扱っています)に相談してみると良さそうです。
以上、AWS事業本部の佐藤(@chari7311)でした。